package 反射;

import java.lang.reflect.Field;

public class MyReflectDemo3 {
    public static void main(String[] args) throws ClassNotFoundException, NoSuchFieldException {
        /**
         * 利用反射获取成员变量:
         * Class类中用于获取成员变量的方法
         * Field[] getFields():返回所有公共成员变量对象的数组
         * Field[] getDeclaredFields(): 返回所有成员变量对象的数组
         * Field getField(String name): 返回单个公共成员变量对象
         * Field getDeclaredField(String name): 返回单个成员变量对象
         * Field类中用于创建对象的方法
         * void set(Object obj, Object value): 赋值
         * Object get(Object obj) 获取值。
         */
        //1.获取字节码文件
        Class<?> aClass = Class.forName("反射.studentR");
        //获取公共的成员变量
        Field[] fields =aClass.getFields();//public java.lang.String 反射.studentR.gender
        for (Field field : fields) {
            System.out.println(field);
        }
        //获取所有的成员变量
        System.out.println("================================");
        Field[] declaredFields = aClass.getDeclaredFields();
        for (Field field : declaredFields) {
            System.out.println(field);
        }
        System.out.println("================================");
        //获取公共的  单个成员变量
        System.out.println(aClass.getField("gender"));
        //获取私有单个成员变量
        System.out.println("================================");
        System.out.println(aClass.getDeclaredField("age"));
    }
}
class studentR {
    private String name;
    private int age;
    public String gender;

    public studentR() {
    }

    public studentR(String name, int age, String gender) {
        this.name = name;
        this.age = age;
        this.gender = gender;
    }

    /**
     * 获取
     * @return name
     */
    public String getName() {
        return name;
    }

    /**
     * 设置
     * @param name
     */
    public void setName(String name) {
        this.name = name;
    }

    /**
     * 获取
     * @return age
     */
    public int getAge() {
        return age;
    }

    /**
     * 设置
     * @param age
     */
    public void setAge(int age) {
        this.age = age;
    }

    /**
     * 获取
     * @return gender
     */
    public String getGender() {
        return gender;
    }

    /**
     * 设置
     * @param gender
     */
    public void setGender(String gender) {
        this.gender = gender;
    }

    public String toString() {
        return "studentR{name = " + name + ", age = " + age + ", gender = " + gender + "}";
    }
}
